﻿$().ready(function() {

	// old school

	function changeColor1(linkObj, newColor) {
		linkObj.style.backgroundColor = newColor;
	}

	function anchorChange1() {
		// настройка цветов
		var config = {
			colors: ["#F63", "#CC0", "#CFF"]
		};
		// получаем ссылки на странице
		var anchors = document.getElementsByTagName("a");
		var size = anchors.length;
		// перечисляем ссылки и назначаем события
		for (var i = 0; i < size; i++) {
			anchors[i].color = config.colors[i];
			anchors[i].onclick = function() {
				changeColor1(this, this.color);
				return false;
			};
		}
	}


	// singleton

	var anchorChange2 = {
		config: {
			colors: ["#F63", "#CC0", "#CFF"]
		},
		// собственно установка фонового цвета
		alterColor: function(linkObj, newColor) {
			linkObj.style.backgroundColor = newColor;
		},
		init: function() {
			var self = this; // сохраняем текущий объект в "self"
			// получаем все ссылки на странице
			var anchors = document.getElementsByTagName("a");
			var size = anchors.length;
			for (var i = 0; i < size; i++) {
				anchors[i].color = self.config.colors[i];
				anchors[i].onclick = function() {
					self.alterColor(this, this.color); // привязываем функцию к событию
					return false;
				};
			}
		}
	};


	// module

	var anchorChange3 = (function() {
		// private свойство
		var config = {
			colors: ["#F63", "#CC0", "#CFF"]
		};
		// private метод
		// доступен только из anchorChange3
		// не доступен снаружи

		function alterColor(linkObj, color) {
			linkObj.style.backgroundColor = color;
		}

		return {
		// public метод
		// доступен снаружи
			changeColor: function(linkObj, newColor) {
				// вызывает private метод, меняющий цвет
				alterColor(linkObj, newColor);
			},
			// public метод
			// может быть вызван снаружи
			init: function() {
				var self = this;
				var anchors = document.getElementsByTagName("a");
				var size = anchors.length;
				for (var i = 0; i < size; i++) {
					anchors[i].color = config.colors[i];
					anchors[i].onclick = function() {
						self.changeColor(this, this.color);
						return false;
					};
				}
			}
		};
	})();


	// opened module

	var anchorChange4 = (function() {
		// это будет private свойство
		var config = {
			colors: ["#F63", "#CC0", "#CFF"]
		};
		// это будет public метод
		var init = function() {
			var self = this; // сохраняем ссылку на this в self
			// получаем все ссылки на странице
			var anchors = document.getElementsByTagName("a");
			var size = anchors.length;
			for (var i = 0; i < size; i++) {
				anchors[i].color = config.colors[i];
				anchors[i].onclick = function() {
					self.changeColor(this, this.color);
					return false;
				};
			}
		};
		// это будет public метод
		var changeColor = function(linkObj, newColor) {
			linkObj.style.backgroundColor = newColor;
		};
		return {
		// перечисляем все public методы и свойства
			init: init,
			changeColor: changeColor
		};
	})();


	// object

	function AnchorChanger() {
		this.init();
	}

	;
	AnchorChanger.prototype.config = {
		colors: ["#F63", "#CC0", "#CFF"]
	};
	AnchorChanger.prototype.changeColor = function(linkObj, newColor) {
		linkObj.style.backgroundColor = newColor;
	};
	AnchorChanger.prototype.init = function() {
		var self = this;
		var anchors = document.getElementsByTagName("a");
		var size = anchors.length;
		for (var i = 0; i < size; i++) {
			anchors[i].color = self.config.colors[i];
			anchors[i].onclick = function() {
				self.changeColor(this, this.color);
				return false;
			};
		}
	};


	// lazy functions

	var anchorChange5 = function() {
		var config = {
			colors: ["#F63", "#CC0", "#CFF"]
		};
		var anchors = document.getElementsByTagName("a");
		var size = anchors.length;
		for (var i = 0; i < size; i++) {
			anchors[i].color = config.colors[i];
			anchors[i].onclick = function() {
				anchorChange5().changeColor(this, this.color);
				return false;
			};
		}
		anchorChange5 = function() {
			return {
				changeColor: function(linkObj, newColor) {
					linkObj.style.backgroundColor = newColor;
				}
			};
		};
	};


	//=================================================================

	// calls

	//anchorChange1();
	//anchorChange2.init();
	//anchorChange3.init();
	anchorChange4.init();
	//var aCh = new AnchorChanger();
	//anchorChange5();
});